/**
 * 保留指定小数位数
 * @param num 要保留小数的数值
 * @param precision 要保留的小数位数，默认为 2
 */
export const round = (num: number, precision = 2): number => {
  const factor = Math.pow(10, precision);
  return Math.round(num * factor) / factor;
};

/**
 * 获取指定数值的天花板数
 * @param num 要获取天花板的数值
 * @param precision 要保留的小数位数，默认为 0
 */
export const ceil = (num: number, precision = 0): number => {
  const factor = Math.pow(10, precision);
  return Math.ceil(num * factor) / factor;
};

/**
 * 获取指定数值的地板数
 * @param num 要获取地板的数值
 * @param precision 要保留的小数位数，默认为 0
 */
export const floor = (num: number, precision = 0): number => {
  const factor = Math.pow(10, precision);
  return Math.floor(num * factor) / factor;
};

/**
 * 将数值转换为百分数
 * @param num 要转换的数值
 * @param precision 要保留的小数位数，默认为 2
 * @param withSymbol 是否带百分号，默认为 true
 */
export const toPercentage = (num: number, precision = 2, withSymbol = true): string => {
  const factor = Math.pow(10, precision);
  const percent = num * 100;
  const rounded = Math.round(percent * factor) / factor;
  const result = String(rounded);
  return withSymbol ? `${result}%` : result;
};
